# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.CloudAsset.V1.Model.Feed do
  @moduledoc """
  An asset feed used to export asset updates to a destinations. An asset feed filter controls what updates are exported. The asset feed must be created within a project, organization, or folder. Supported destinations are: Pub/Sub topics.

  ## Attributes

  *   `assetNames` (*type:* `list(String.t)`, *default:* `nil`) - A list of the full names of the assets to receive updates. You must specify either or both of asset_names and asset_types. Only asset updates matching specified asset_names or asset_types are exported to the feed. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. For a list of the full names for supported asset types, see [Resource name format](/asset-inventory/docs/resource-name-format).
  *   `assetTypes` (*type:* `list(String.t)`, *default:* `nil`) - A list of types of the assets to receive updates. You must specify either or both of asset_names and asset_types. Only asset updates matching specified asset_names or asset_types are exported to the feed. Example: `"compute.googleapis.com/Disk"` For a list of all supported asset types, see [Supported asset types](/asset-inventory/docs/supported-asset-types).
  *   `condition` (*type:* `GoogleApi.CloudAsset.V1.Model.Expr.t`, *default:* `nil`) - A condition which determines whether an asset update should be published. If specified, an asset will be returned only when the expression evaluates to true. When set, `expression` field in the `Expr` must be a valid [CEL expression] (https://github.com/google/cel-spec) on a TemporalAsset with name `temporal_asset`. Example: a Feed with expression ("temporal_asset.deleted == true") will only publish Asset deletions. Other fields of `Expr` are optional. See our [user guide](https://cloud.google.com/asset-inventory/docs/monitoring-asset-changes-with-condition) for detailed instructions.
  *   `contentType` (*type:* `String.t`, *default:* `nil`) - Asset content type. If not specified, no content but the asset name and type will be returned.
  *   `feedOutputConfig` (*type:* `GoogleApi.CloudAsset.V1.Model.FeedOutputConfig.t`, *default:* `nil`) - Required. Feed output configuration defining where the asset updates are published to.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Required. The format will be projects/{project_number}/feeds/{client-assigned_feed_identifier} or folders/{folder_number}/feeds/{client-assigned_feed_identifier} or organizations/{organization_number}/feeds/{client-assigned_feed_identifier} The client-assigned feed identifier must be unique within the parent project/folder/organization.
  *   `relationshipTypes` (*type:* `list(String.t)`, *default:* `nil`) - A list of relationship types to output, for example: `INSTANCE_TO_INSTANCEGROUP`. This field should only be specified if content_type=RELATIONSHIP. * If specified: it outputs specified relationship updates on the [asset_names] or the [asset_types]. It returns an error if any of the [relationship_types] doesn't belong to the supported relationship types of the [asset_names] or [asset_types], or any of the [asset_names] or the [asset_types] doesn't belong to the source types of the [relationship_types]. * Otherwise: it outputs the supported relationships of the types of [asset_names] and [asset_types] or returns an error if any of the [asset_names] or the [asset_types] has no replationship support. See [Introduction to Cloud Asset Inventory](https://cloud.google.com/asset-inventory/docs/overview) for all supported asset types and relationship types.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :assetNames => list(String.t()) | nil,
          :assetTypes => list(String.t()) | nil,
          :condition => GoogleApi.CloudAsset.V1.Model.Expr.t() | nil,
          :contentType => String.t() | nil,
          :feedOutputConfig => GoogleApi.CloudAsset.V1.Model.FeedOutputConfig.t() | nil,
          :name => String.t() | nil,
          :relationshipTypes => list(String.t()) | nil
        }

  field(:assetNames, type: :list)
  field(:assetTypes, type: :list)
  field(:condition, as: GoogleApi.CloudAsset.V1.Model.Expr)
  field(:contentType)
  field(:feedOutputConfig, as: GoogleApi.CloudAsset.V1.Model.FeedOutputConfig)
  field(:name)
  field(:relationshipTypes, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.CloudAsset.V1.Model.Feed do
  def decode(value, options) do
    GoogleApi.CloudAsset.V1.Model.Feed.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.CloudAsset.V1.Model.Feed do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
